package nlp;

import java.util.Collection;
import java.util.Iterator;
import java.util.Vector;

import nlp.constantes.NLPConstants;
import nlp.parser.ParserAfirmativo;
import nlp.parser.ParserDesconocido;
import nlp.parser.ParserDificilmente;
import nlp.parser.ParserIrrelevante;
import nlp.parser.ParserNegativo;
import nlp.parser.ParserProbablemente;
import nlp.parser.RegexpParser;

/**
 * @author lgorbliuk
 */
public class NLPExecutor {

	private static NLPExecutor instance;
	
	private static Collection parsers;
	
	private NLPExecutor(){
		parsers = new Vector();
		parsers.add(new ParserIrrelevante());
		parsers.add(new ParserDificilmente());
		parsers.add(new ParserProbablemente());
		parsers.add(new ParserDesconocido());
		parsers.add(new ParserAfirmativo());
		parsers.add(new ParserNegativo());
	}
	
	public static NLPExecutor getInstance(){
		if(instance==null) instance = new NLPExecutor();
		return instance;
	}
	
	public String interpretar(String entrada){
		
		String entradaPreparada = prepararEntrada(entrada);
		
		for (Iterator iter = parsers.iterator(); iter.hasNext();) {
			RegexpParser parser = (RegexpParser) iter.next();
			String resultado = parser.procesarEntrada(entradaPreparada);
			if(resultado!=null) return resultado;
		}
		
		return null;
		
	}

	private String prepararEntrada(String entrada) {
		String auxiliar = entrada.toLowerCase();
		auxiliar = auxiliar.replaceAll("^//s*","");
		auxiliar = auxiliar.replaceAll("//s*$","");
		return auxiliar;
	}
	

	
}
